home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / Palette.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  17KB  |  520 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   Palette.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   06-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   06-Oct-91     1.00            Palette gadgets editor.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. /*
  22.  * --- External referenced data
  23.  */
  24. extern ULONG                Class;
  25. extern UWORD                Code;
  26. extern struct Gadget       *Object;
  27. extern APTR                 MainVisualInfo;
  28. extern struct TextAttr      Topaz80;
  29. extern struct Screen       *MainScreen;
  30. extern struct Window       *MainWindow;
  31. extern UWORD                ngFlags;
  32. extern WORD                 ngLeft, ngTop, ngWidth, ngHeight;
  33. extern UBYTE               *PlaceList[];
  34. extern UWORD                PlaceFlags[];
  35. extern struct ExtGadgetList Gadgets;
  36. extern struct MemoryChain  *Chain;
  37. extern BOOL                 Saved;
  38.  
  39. /*
  40.  * --- Gadget ID's
  41.  */
  42. #define GD_TEXT             0
  43. #define GD_LABEL            1
  44. #define GD_UNDERSCORE       2
  45. #define GD_DISABLED         3
  46. #define GD_HIGHLABEL        4
  47. #define GD_IWIDTH           5
  48. #define GD_IHEIGHT          6
  49. #define GD_TEXTPLACE        7
  50. #define GD_OK               8
  51. #define GD_CANCEL           9
  52.  
  53. /*
  54.  * --- Module data
  55.  */
  56. struct Window              *plWnd    = NULL;
  57. struct Gadget              *plGList  = NULL;
  58. struct Gadget              *plGadgets[8];
  59. BOOL                        plScore   = FALSE, plDisabled = FALSE;
  60. WORD                        plZoom[4];
  61.  
  62. struct TagItem              plnwTags[] = {
  63.     WA_Left,                0l,
  64.     WA_Top,                 0l,
  65.     WA_Width,               0l,
  66.     WA_Height,              0l,
  67.     WA_IDCMP,               IDCMP_CLOSEWINDOW | CYCLEIDCMP | BUTTONIDCMP | CHECKBOXIDCMP | IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY,
  68.     WA_Flags,               WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_RMBTRAP,
  69.     WA_Gadgets,             0l,
  70.     WA_Title,               "Edit PALETTE gadget:",
  71.     WA_AutoAdjust,          TRUE,
  72.     WA_Zoom,                (Tag)plZoom,
  73.     WA_CustomScreen,        0l,
  74.     TAG_DONE };
  75.  
  76. /*
  77.  * --- Create the palette gadget.
  78.  */
  79. long MakePalette( void )
  80. {
  81.     struct ExtNewGadget *eng  = 0l;
  82.     struct TagItem      *tags = 0l;
  83.  
  84.     if ( eng = AllocItem( Chain, (long)sizeof( struct ExtNewGadget ), MEMF_PUBLIC )) {
  85.         if ( tags = MakeTagList( 4l )) {
  86.  
  87.             eng->en_NumTags = 4l;
  88.             eng->en_Tags = tags;
  89.  
  90.             eng->en_Kind = PALETTE_KIND;
  91.  
  92.             ChangePalette( eng );
  93.  
  94.             RemoveAllGadgets();
  95.  
  96.             AddTail(( struct List * )&Gadgets, ( struct Node * )eng );
  97.  
  98.             Renumber();
  99.  
  100.             if ( RemakeAllGadgets())
  101.                 return TRUE;
  102.  
  103.             Remove(( struct Node * )eng);
  104.         }
  105.     }
  106.  
  107.     MyRequest( "Ahem....", "CONTINUE", "Out of memory !" );
  108.  
  109.     if ( tags )         FreeTagList( tags, 4l );
  110.     if ( eng  )         FreeItem( Chain, eng, (long)sizeof( struct ExtNewGadget ));
  111.  
  112.     return FALSE;
  113. }
  114.  
  115. /*
  116.  * --- Change the palette gadget.
  117.  */
  118. void ChangePalette( struct ExtNewGadget *eng )
  119. {
  120.     struct TagItem      *tags;
  121.     UBYTE               *slab, *text, tn = 0;
  122.     LONG                 num;
  123.  
  124.     tags = eng->en_Tags;
  125.  
  126.     slab = (( struct StringInfo * )plGadgets[ GD_LABEL ]->SpecialInfo )->Buffer;
  127.     text = (( struct StringInfo * )plGadgets[ GD_TEXT  ]->SpecialInfo )->Buffer;
  128.  
  129.     eng->en_NewGadget.ng_LeftEdge   =   ngLeft;
  130.     eng->en_NewGadget.ng_TopEdge    =   ngTop;
  131.     eng->en_NewGadget.ng_Width      =   ngWidth;
  132.     eng->en_NewGadget.ng_Height     =   ngHeight;
  133.  
  134.     if ( strncmp( slab, "Gadget", 6 ) && strlen( slab )) {
  135.         strcpy( &eng->en_SourceLabel[0], slab );
  136.         eng->en_SpecialFlags |= EGF_USERLABEL;
  137.     } else
  138.         eng->en_SpecialFlags = 0l;
  139.  
  140.     if ( strlen( text )) {
  141.         strcpy( &eng->en_GadgetText[0], text );
  142.         eng->en_NewGadget.ng_GadgetText = &eng->en_GadgetText[0];
  143.         eng->en_NewGadget.ng_Flags      = ngFlags;
  144.     } else {
  145.         eng->en_NewGadget.ng_GadgetText = 0l;
  146.         eng->en_NewGadget.ng_Flags      = 0;
  147.     }
  148.  
  149.     if ( plScore && strlen( text )) {
  150.         tags[ tn   ].ti_Tag  = GT_Underscore;
  151.         tags[ tn++ ].ti_Data = (Tag)'_';
  152.     }
  153.  
  154.     if ( plDisabled )
  155.         eng->en_SpecialFlags |= EGF_DISABLED;
  156.  
  157.     num = (( struct StringInfo * )plGadgets[ GD_IWIDTH ]->SpecialInfo )->LongInt;
  158.  
  159.     if ( num > 8 ) {
  160.         eng->en_IndicatorSize = num;
  161.         tags[ tn   ].ti_Tag    = GTPA_IndicatorWidth;
  162.         tags[ tn++ ].ti_Data   = num;
  163.     } else {
  164.  
  165.         num = (( struct StringInfo * )plGadgets[ GD_IHEIGHT ]->SpecialInfo )->LongInt;
  166.  
  167.         if ( num > 8 ) {
  168.             eng->en_IndicatorSize = num;
  169.             tags[ tn   ].ti_Tag   = GTPA_IndicatorHeight;
  170.             tags[ tn++ ].ti_Data  = num;
  171.         }
  172.     }
  173.  
  174.     tags[ tn   ].ti_Tag  = GTPA_Depth;
  175.     tags[ tn++ ].ti_Data = MainScreen->BitMap.Depth;
  176.  
  177.     tags[ tn ].ti_Tag = TAG_DONE;
  178.  
  179.     Saved = FALSE;
  180. }
  181.  
  182. /*
  183.  * --- Open the EditPalette requester.
  184.  */
  185. long EditPalette( WORD x, WORD y, WORD x1, WORD y1, struct Gadget *edit )
  186. {
  187.     struct Gadget       *g;
  188.     struct ExtNewGadget *e;
  189.     struct NewGadget     ng;
  190.     BOOL                 running = TRUE, ok = FALSE;
  191.     WORD                 l, t, w, h, btop, bleft, gw, gh;
  192.     UBYTE               *label = 0l, *slabel = 0l, gbuf[10];
  193.     UBYTE              **cycle;
  194.     Tag                  place = 0l, iwidth = 0l, iheight = 0;
  195.     LONG                 num;
  196.     UWORD                flag  = PLACETEXT_LEFT, high = FALSE, ID;
  197.  
  198.     if ( edit ) {
  199.         e = FindExtGad( edit );
  200.  
  201.         x  = e->en_NewGadget.ng_LeftEdge;
  202.         y  = e->en_NewGadget.ng_TopEdge;
  203.         gw = e->en_NewGadget.ng_Width;
  204.         gh = e->en_NewGadget.ng_Height;
  205.  
  206.         label  = &e->en_GadgetText[0];
  207.         slabel = &e->en_SourceLabel[0];
  208.  
  209.         flag = e->en_NewGadget.ng_Flags;
  210.  
  211.         if ( flag & PLACETEXT_LEFT  ) place = 0l;
  212.         if ( flag & PLACETEXT_RIGHT ) place = 1l;
  213.         if ( flag & PLACETEXT_ABOVE ) place = 2l;
  214.         if ( flag & PLACETEXT_BELOW ) place = 3l;
  215.  
  216.         if ( flag & NG_HIGHLABEL )    high = TRUE;
  217.  
  218.         plScore = MyTagInArray( GT_Underscore, e->en_Tags );
  219.  
  220.         iwidth  = GetTagData( GTPA_IndicatorWidth, 0l, e->en_Tags );
  221.         iheight = GetTagData( GTPA_IndicatorHeight,0l, e->en_Tags );
  222.  
  223.         if (( e->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  224.             plDisabled = TRUE;
  225.         else
  226.             plDisabled = FALSE;
  227.  
  228.     } else {
  229.         if ( x > x1 ) { gw = x; x = x1; x1 = gw; }
  230.         if ( y > y1 ) { gh = y; y = y1; y1 = gh; }
  231.  
  232.         gw = x1 - x + 1;
  233.         gh = y1 - y + 1;
  234.     }
  235.  
  236.     cycle = &PlaceList[1];
  237.  
  238.     btop  = MainScreen->WBorTop + 1 + MainScreen->RastPort.TxHeight;
  239.     bleft = MainScreen->WBorLeft;
  240.  
  241.     w = bleft + MainScreen->WBorRight  + 300;
  242.     h = btop  + MainScreen->WBorBottom + 132;
  243.     l = (( MainScreen->Width  >> 1 ) - ( w >> 1 ));
  244.     t = (( MainScreen->Height >> 1 ) - ( h >> 1 ));
  245.  
  246.     plZoom[0] = 0;
  247.     plZoom[1] = btop;
  248.     plZoom[2] = 200;
  249.     plZoom[3] = btop;
  250.  
  251.     plnwTags[0 ].ti_Data = l;
  252.     plnwTags[1 ].ti_Data = t;
  253.     plnwTags[2 ].ti_Data = w;
  254.     plnwTags[3 ].ti_Data = h;
  255.     plnwTags[10].ti_Data = (Tag)MainScreen;
  256.  
  257.     if ( g = CreateContext( &plGList ))  {
  258.  
  259.         ng.ng_LeftEdge      =   bleft + 56;
  260.         ng.ng_TopEdge       =   btop + 4;
  261.         ng.ng_Width         =   236;
  262.         ng.ng_Height        =   12;
  263.         ng.ng_GadgetText    =   "_Text ";
  264.         ng.ng_TextAttr      =   &Topaz80;
  265.         ng.ng_GadgetID      =   GD_TEXT;
  266.         ng.ng_Flags         =   PLACETEXT_LEFT;
  267.         ng.ng_VisualInfo    =   MainVisualInfo;
  268.         ng.ng_UserData      =   0l;
  269.  
  270.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, (Tag)label, GTST_MaxChars, (Tag)GT_MAXLABELNAME + 1, GT_Underscore, (Tag)'_', TAG_DONE );
  271.  
  272.         SetStringGadget( g );
  273.  
  274.         plGadgets[ GD_TEXT ] = g;
  275.  
  276.         ng.ng_TopEdge       =   btop + 20;
  277.         ng.ng_GadgetText    =   "_Label";
  278.         ng.ng_GadgetID      =   GD_LABEL;
  279.  
  280.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, (Tag)slabel, GTST_MaxChars, (Tag)GT_MAXLABEL + 1, GT_Underscore, (Tag)'_', TAG_DONE );
  281.  
  282.         SetStringGadget( g );
  283.  
  284.         plGadgets[ GD_LABEL ] = g;
  285.  
  286.         ng.ng_LeftEdge      =   bleft + 96;
  287.         ng.ng_TopEdge       =   btop + 36;
  288.         ng.ng_GadgetText    =   "_Underscore";
  289.         ng.ng_GadgetID      =   GD_UNDERSCORE;
  290.  
  291.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)plScore, GT_Underscore, (Tag)'_', TAG_DONE );
  292.  
  293.         plGadgets[ GD_UNDERSCORE ] = g;
  294.  
  295.         ng.ng_LeftEdge      =   bleft + 266;
  296.         ng.ng_GadgetText    =   "_Disabled";
  297.         ng.ng_GadgetID      =   GD_DISABLED;
  298.  
  299.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)plDisabled, GT_Underscore, (Tag)'_', TAG_DONE );
  300.  
  301.         plGadgets[ GD_DISABLED ] = g;
  302.  
  303.         ng.ng_LeftEdge      =   bleft + 96;
  304.         ng.ng_TopEdge       =   btop + 51;
  305.         ng.ng_GadgetText    =   "_High Label";
  306.         ng.ng_GadgetID      =   GD_HIGHLABEL;
  307.  
  308.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)high, GT_Underscore, '_', TAG_DONE );
  309.  
  310.         plGadgets[ GD_HIGHLABEL ] = g;
  311.  
  312.         ng.ng_LeftEdge      =   bleft + 96;
  313.         ng.ng_TopEdge       =   btop + 66;
  314.         ng.ng_Width         =   196;
  315.         ng.ng_Height        =   12;
  316.         ng.ng_GadgetText    =   "_Width     ";
  317.         ng.ng_GadgetID      =   GD_IWIDTH;
  318.  
  319.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, (Tag)iwidth, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  320.  
  321.         SetStringGadget( g );
  322.  
  323.         plGadgets[ GD_IWIDTH ] = g;
  324.  
  325.         ng.ng_TopEdge       =   btop + 82;
  326.         ng.ng_GadgetText    =   "H_eight    ";
  327.         ng.ng_GadgetID      =   GD_IHEIGHT;
  328.  
  329.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, (Tag)iheight, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  330.  
  331.         SetStringGadget( g );
  332.  
  333.         plGadgets[ GD_IHEIGHT ] = g;
  334.  
  335.         ng.ng_TopEdge       =   btop + 98;
  336.         ng.ng_Height        =   13;
  337.         ng.ng_GadgetText    =   "Text _Place";
  338.         ng.ng_GadgetID      =   GD_TEXTPLACE;
  339.  
  340.         g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, (Tag)cycle, GTCY_Active, place, GT_Underscore, (Tag)'_', TAG_DONE );
  341.  
  342.         plGadgets[ GD_TEXTPLACE ] = g;
  343.  
  344.         ng.ng_LeftEdge      =   bleft + 8;
  345.         ng.ng_TopEdge       =   btop + 115;
  346.         ng.ng_Width         =   90;
  347.         ng.ng_GadgetText    =   "_OK";
  348.         ng.ng_Flags         =   PLACETEXT_IN;
  349.         ng.ng_GadgetID      =   GD_OK;
  350.  
  351.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  352.  
  353.         ng.ng_LeftEdge      =   bleft + 202;
  354.         ng.ng_GadgetText    =   "_CANCEL";
  355.         ng.ng_GadgetID      =   GD_CANCEL;
  356.  
  357.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  358.  
  359.         if ( g ) {
  360.  
  361.             plnwTags[6].ti_Data = (Tag)plGList;
  362.  
  363.             if ( plWnd = OpenWindowTagList( 0l, plnwTags )) {
  364.  
  365.                 plZoom[0] = l;
  366.                 plZoom[1] = t;
  367.                 plZoom[2] = w;
  368.                 plZoom[3] = h;
  369.  
  370.                 GT_RefreshWindow( plWnd, 0l );
  371.  
  372.                 do {
  373.                     WaitPort( plWnd->UserPort );
  374.  
  375.                     while ( ReadIMsg( plWnd )) {
  376.  
  377.                         switch ( Class ) {
  378.  
  379.                             case    IDCMP_REFRESHWINDOW:
  380.                                 GT_BeginRefresh( plWnd );
  381.                                 GT_EndRefresh( plWnd, TRUE );
  382.                                 break;
  383.  
  384.                             case    IDCMP_CLOSEWINDOW:
  385.                                 running = FALSE;
  386.                                 break;
  387.  
  388.                             case    IDCMP_GADGETUP:
  389.                                 switch( Object->GadgetID ) {
  390.  
  391.                                     case    GD_UNDERSCORE:
  392.                                         FlipFlop( 0l, 0l, 0l, &plScore );
  393.                                         break;
  394.  
  395.                                     case    GD_DISABLED:
  396.                                         FlipFlop( 0l, 0l, 0l, &plDisabled );
  397.                                         break;
  398.  
  399.                                     case    GD_HIGHLABEL:
  400.                                         FlipFlop( 0l, 0l, 0l, &high );
  401.                                         break;
  402.  
  403.                                     case    GD_IWIDTH:
  404.                                         num = (( struct StringInfo * )plGadgets[ GD_IWIDTH ]->SpecialInfo )->LongInt;
  405.  
  406.                                         if ( num > 8 )
  407.                                             GT_SetGadgetAttrs( plGadgets[ GD_IWIDTH ], plWnd, 0l, GTIN_Number, num, TAG_DONE );
  408.                                         break;
  409.  
  410.                                     case    GD_IHEIGHT:
  411.                                         num = (( struct StringInfo * )plGadgets[ GD_IHEIGHT ]->SpecialInfo )->LongInt;
  412.  
  413.                                         if ( num > 8 )
  414.                                             GT_SetGadgetAttrs( plGadgets[ GD_IHEIGHT ], plWnd, 0l, GTIN_Number, num, TAG_DONE );
  415.                                         break;
  416.  
  417.                                     case    GD_TEXTPLACE:
  418.                                         if ( place++ == 3 )
  419.                                             place = 0;
  420.  
  421.                                         flag = PlaceFlags[ place + 1 ];
  422.                                         break;
  423.  
  424.                                     case    GD_OK:
  425.                                         Ok:
  426.                                         ok = TRUE;
  427.  
  428.                                     case    GD_CANCEL:
  429.                                         Cancel:
  430.                                         running = FALSE;
  431.                                         break;
  432.                                 }
  433.                                 break;
  434.  
  435.                             case    IDCMP_VANILLAKEY:
  436.                                 switch( Code ) {
  437.  
  438.                                     case    't':
  439.                                         ID = GD_TEXT;
  440.                                         goto Activate;
  441.  
  442.                                     case    'l':
  443.                                         ID = GD_LABEL;
  444.                                         goto Activate;
  445.  
  446.                                     case    'u':
  447.                                         FlipFlop( plWnd, plGadgets, GD_UNDERSCORE, &plScore );
  448.                                         break;
  449.  
  450.                                     case    'd':
  451.                                         FlipFlop( plWnd, plGadgets, GD_DISABLED, &plDisabled );
  452.                                         break;
  453.  
  454.                                     case    'h':
  455.                                         FlipFlop( plWnd, plGadgets, GD_HIGHLABEL, &high );
  456.                                         break;
  457.  
  458.                                     case    'w':
  459.                                         ID = GD_IWIDTH;
  460.                                         goto Activate;
  461.  
  462.                                     case    'e':
  463.                                         ID = GD_IHEIGHT;
  464.                                         goto Activate;
  465.  
  466.                                     case    'p':
  467.                                         if ( place++ == 3 )
  468.                                             place = 0;
  469.  
  470.                                         flag = PlaceFlags[ place + 1 ];
  471.                                         GT_SetGadgetAttrs( plGadgets[ GD_TEXTPLACE ], plWnd, 0l, GTCY_Active, place, TAG_DONE );
  472.                                         break;
  473.  
  474.                                     case    'o':
  475.                                         goto Ok;
  476.  
  477.                                     case    'c':
  478.                                         goto Cancel;
  479.                                 }
  480.                                 break;
  481.                                 Activate:
  482.                                 ActivateGadget( plGadgets[ ID ], plWnd, 0l );
  483.                                 break;
  484.                         }
  485.                     }
  486.                 } while ( running );
  487.             }
  488.         }
  489.     }
  490.  
  491.     if ( ok) {
  492.         if ( high )  flag |= NG_HIGHLABEL;
  493.  
  494.         ngFlags     =   flag;
  495.         ngLeft      =   x;
  496.         ngTop       =   y;
  497.         ngWidth     =   gw;
  498.         ngHeight    =   gh;
  499.         if ( NOT edit )
  500.             ok = MakePalette();
  501.         else {
  502.             RemoveAllGadgets();
  503.             ChangePalette( e );
  504.             Renumber();
  505.             ok = RemakeAllGadgets();
  506.         }
  507.     } else if ( NOT edit )
  508.         Box( x, y, x1, y1 );
  509.  
  510.     if ( plWnd )           CloseWindow( plWnd );
  511.     if ( plGList )         FreeGadgets( plGList );
  512.  
  513.     plWnd     = 0l;
  514.     plGList   = 0l;
  515.  
  516.     ClearMsgPort( MainWindow->UserPort );
  517.  
  518.     return( ok );
  519. }
  520.